package com.github.codemperor.core.schedule.db;

import com.github.codemperor.core.util.SpringContextUtil;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.sql.Timestamp;
import java.util.List;

/**
 * job相关的配置，主要用于各个数据子类业务的执行配置
 */
@Getter
@Setter
@Slf4j
public class EmSchedulerManager {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long id;
    protected Timestamp createTime;
    protected Timestamp updateTime;

    /**
     * 子类,用于标识每种流程的唯一,自定义配置的唯一标识,必填,可继承
     */
    private String classz;
    /**
     * 子类业务实现的描述，必须填写,用于配置描述,可继承
     */
    private String description;
    /**
     * 每一次流程的cron，可以动态配置,只在ods执行层生效
     * 默认：utc日期每天早上8点开始同步，相当于中国区PM16点, 业务方相当于AM3点
     * 格式：HH:mm,以逗号分隔
     * 可继承
     */
    private String cron;

    /**
     * 执行等待，是否已经在执行，每一个子类同时间只能执行一次，并且如果未完成执行，再次执行也会被拒绝
     */
    private Boolean await;

    /**
     * 禁用或者启用
     */
    private Boolean active;

    public static List<EmSchedulerManager> getAllJob() {
        EmSchedulerManagerMapper mapper = SpringContextUtil.getBean(EmSchedulerManagerMapper.class);
        return mapper.selectAll();
    }

    public void updateEmJobConfig() {
        if (id == null) {
            return;
        }
        EmSchedulerManagerMapper mapper = SpringContextUtil.getBean(EmSchedulerManagerMapper.class);
        this.await = null;
        this.classz = null;
        this.updateTime = null;
        mapper.updateByPrimaryKeySelective(this);
    }
}
